# import
import numpy as np
import pandas as pd

import os
import sys
sys.path.append(os.path.join(os.path.dirname(__file__), '..'))
from util.models import *
from util.misc import *
from restrictiveness import *

## mat file
from scipy.io import loadmat

# load dataset
base = os.path.dirname(os.path.abspath(__file__))
file_name = os.path.normpath(os.path.join(base, '../data/AGGS2001.csv'))
df_full = pd.read_csv(file_name)

## drop lotteries over losses
df = df_full[df_full['z2'] >= 0]

df_lottery = preprocess_df(df)
z1 = df_lottery['z1'].values
z2 = df_lottery['z2'].values
p1 = df_lottery['p1'].values
expval = df_lottery['expected_value'].values

base = os.path.dirname(os.path.abspath(__file__))
file_name = os.path.normpath(os.path.join(base, '../fake_ce/AGGS2001_generated_ce.csv'))
df_ce = pd.read_csv(file_name)
ce_data = df_ce.values

# set search space for parameters
alpha_grid_size = 0.01
eta_grid_size = 0.01
alpha_lbd = 0.01
alpha_ubd = 1
eta_lbd = -1
eta_ubd = 5

alpha_grid = np.arange(alpha_lbd, alpha_ubd+alpha_grid_size, alpha_grid_size)
eta_grid = np.arange(eta_lbd, eta_ubd+eta_grid_size, eta_grid_size)
param_grid = cartesian_product(alpha_grid, eta_grid)

restrictiveness, stderr = compute_restrictiveness(z1, z2, p1, expval, ce_data, param_grid, closest=closest_DA)
print('restrictiveness: {}'.format(restrictiveness))
print('stderr: {}'.format(stderr))
